package edu.hubu.talentmanagementsystem.service;

import edu.hubu.talentmanagementsystem.model.ext.Resource;
import com.baomidou.mybatisplus.extension.service.IService;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;
import java.util.Optional;

/**
 * @author moonlan
 * date 2021/3/2 下午8:43
 */
@SuppressWarnings(value = "unused")
public interface IResourceService extends IService<Resource> {

    /**
     * 根据ID删除
     *
     * @param id 主键
     * @return 是否删除成功
     */
    boolean deleteById(Integer id);

    /**
     * 插入记录
     *
     * @param record 需要插入的记录
     * @return 插入的结果
     */
    Optional<Resource> insert(Resource record);

    /**
     * 根据ID查询
     *
     * @param id 主键
     * @return 查询的结果
     */
    Optional<Resource> selectById(Integer id);

    /**
     * 查询所有，并根据order排序
     *
     * @param order 排序字段，可以为null
     * @return 查询到的所有结果的集合
     */
    List<Resource> selectAll(String order);

    /**
     * 分页查询所有
     *
     * @param currentPage 当前页
     * @param pageSize    页面数据量
     * @param order       排序字段，可以为null
     * @return 查询到的所有结果的集合
     */
    Page<Resource> selectAllPaged(@RequestParam(required = false, defaultValue = "1") Integer currentPage,
                                  @RequestParam(required = false, defaultValue = "5") Integer pageSize, String order);

    /**
     * 分页模糊查询所有
     *
     * @param currentPage 当前页
     * @param pageSize    页面数据量
     * @param record      模糊查询的条件
     * @param order       排序字段，可以为null
     * @return 查询到的所有结果的集合
     */
    Page<Resource> selectLikePaged(@RequestParam(required = false, defaultValue = "1") Integer currentPage,
            @RequestParam(required = false, defaultValue = "5") Integer pageSize, Resource record, String order);

    /**
     * 计算数据量
     *
     * @param record 计算数据量的条件
     * @return 查询到的所有结果集合
     */
    int count(Resource record);

    /**
     * 根据ID修改
     *
     * @param id     主键
     * @param record 计算数据量的条件
     * @return 更新所受的影响行数
     */
    Optional<Resource> updateById(Integer id, Resource record);

    /**
     * 获取默认头像
     *
     * @param role     身份（"staff","company"）
     * @return 默认头像资源
     */
    Resource selectDefaultHead(String role);

    void testAdd(MultipartFile file);

    String testGetUrl(Integer resourceId);
}
